package view.shop
{
import core.Language;

import flash.display.MovieClip;

import mx.utils.StringUtil;

import utils.TimeUtil;

import values.shop.ShopItemValue;

/**
 * ShopItemTimeLimiterProxy
 * @author jliang
 *
 */
public class ShopItemTimeLimiterProxy extends ShopItemHandlerProxy
{
    //==========================================================================
    //  Constructor
    //==========================================================================
    public function ShopItemTimeLimiterProxy()
    {
        super();
    }
    //==========================================================================
    //  Properties
    //==========================================================================
    protected var _data:ShopItemValue;
    
    public function get data():ShopItemValue
    {
        return _data;
    }
    
    public function set data(value:ShopItemValue):void
    {
        _data = value;
    }
    //==========================================================================
    //  Overridden methods: ComponentProxy
    //==========================================================================    
    override public function parse(target:MovieClip):void
    {
        super.parse(target);
    }
    
    override public function dispose():void
    {
        reset();
        
        super.dispose();        
    }
    //==========================================================================
    //  Public methods
    //==========================================================================
    public function reset():void
    {
        this.visible = false;
        TimeUtil.removeRenderFunction(checkTime);
    }
    
    public function check():void
    {
        if (!data) return;
        
        if (data.hasTimeOn || data.hasTimeOff)
        {
            if (!isAlreadyOnOrOff)
            {
                TimeUtil.addRenderFunction(checkTime);
                return;
            }
        }
        
        this.visible = false;
    }
    //==========================================================================
    //  Protected methods
    //==========================================================================
    protected function get isAlreadyOnOrOff():Boolean
    {
        var rest:Number = 0;
        if (data.hasTimeOn) 
        {
            rest = TimeUtil.currentGameTimeSec - data.timeOn;
            if (rest > 0) return true;
            else return false;
        }
        else
        {
            rest =  TimeUtil.currentGameTimeSec - data.timeOff;
            if (rest > 0) return true;
            else return false;
        }
    }
    
    protected function checkTime():void
    {
        if (!data) return;
        
        var str:String;
        var time:Number;
        if (data.hasTimeOn) 
        {
            str = Language.getText("@shop_time_limit_on_label");
            time = data.timeOn;
        }
        else if (data.hasTimeOff) 
        {
            str = Language.getText("@shop_time_limit_off_label");
            time = data.timeOff;
        }
        
        var restTimeSec:Number = Math.abs(TimeUtil.currentGameTimeSec - time);
        if (restTimeSec < TimeUtil.HOUR_24_SEC && !this.visible)
        {
            this.visible = true;
        }
        
        if (restTimeSec <= 0)
        {
            reset();
            render.checkBuyable();
            return;
        }
        
        skin.label.text = StringUtil.substitute(str, TimeUtil.parseSecsToString(restTimeSec));
    }
}
}





